print(help(print))


# print(...)
#     print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
#
#     Prints the values to a stream, or to sys.stdout by default.
#     Optional keyword arguments:
#     file:  a file-like object (stream); defaults to the current sys.stdout.
#     sep:   string inserted between values, default a space.
#     end:   string appended after the last value, default a newline.
#     flush: whether to forcibly flush the stream.
#
# None

def exchange(dollar, rate=6.32):
    """
    功能:汇率转换，美元 -> 人民币
    参数:
    - dollar: 美元数据
    - rate: 费率，默认值是 6.32（2025-11-17）
    返回值:
    - 人民币的数量
    """
    return dollar * rate


# 通过 help 函数查看自己定义的函数的文档
print(help(exchange))


# exchange(dollar, rate=6.32)
#     功能:汇率转换，美元 -> 人民币
#     参数:
#     - dollar: 美元数据
#     - rate: 费率，默认值是 6.32（2025-11-17）
#     返回值:
#     - 人民币的数量
#
# None


# 类型注释
# 表示第一个参数 s 希望传入字符串，第二个参数希望传入整数，并且返回一个字符串
# BUT 这个只是弱约束
def times(s: str, n: int) -> str:
    return s * n


s = times('FishC', 5)
print(s)  # FishCFishCFishCFishCFishC

print("=" * 100)
# 虽然函数的作者希望第一个参数传入的是字符串，但是这个字符类型注释，是给机器看的，使用的人还是可以传其他类型的
print(times(5, 5))  # 25


# 类型注释
# 表示第一个参数 s 希望传入字符串，第二个参数希望传入整数，并且返回一个字符串
# BUT 这个只是弱约束
def times_2(s: str = 'FishC', n: int = 3) -> str:
    return s * n


# 期望传入的是一个列表
def times_3(arr: list, n: int = 3) -> list:
    return arr * n


print(times_3([1, 2, 3], 3))  # [1, 2, 3, 1, 2, 3, 1, 2, 3]


# 期望传入的是一个整数列表
def times_4(arr: list[int], n: int = 3) -> list:
    return arr * n


# 期望传入的是一个字典
def times_5(param: dict[str, int], n: int = 3) -> list:
    return list(param.keys()) * n


print(times_5({'A': 1, 'B': 2, 'C': 3}, 3))  # ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C']

